#!/usr/bin/env python3
"""
非参数统计分析 MCP 服务器使用示例
"""

import json
import numpy as np
from server import StatisticsAnalyzer

def example_single_sample():
    """单样本分析示例"""
    print("=== 单样本分析示例 ===")
    
    # 模拟某产品的质量测量数据
    np.random.seed(123)
    quality_scores = np.random.normal(85, 10, 30).tolist()
    
    print(f"质量评分数据 (n={len(quality_scores)}):")
    print(f"前10个数据点: {[round(x, 2) for x in quality_scores[:10]]}")
    
    analyzer = StatisticsAnalyzer()
    
    # 描述性统计
    five_num = analyzer.five_number_summary(quality_scores)
    basic_stats = analyzer.basic_statistics(quality_scores)
    
    print("\n描述性统计结果:")
    print(f"五数概括: {json.dumps(five_num, indent=2, ensure_ascii=False)}")
    print(f"\n基本统计量: {json.dumps(basic_stats, indent=2, ensure_ascii=False)}")
    
    # 随机性检验
    randomness = analyzer.white_noise_test(quality_scores)
    print(f"\n随机性检验: {json.dumps(randomness, indent=2, ensure_ascii=False)}")
    
    # 结果解释
    print("\n结果解释:")
    print(f"- 平均质量评分: {basic_stats['mean']:.2f}")
    print(f"- 质量稳定性 (变异系数): {basic_stats['coefficient_of_variation']:.3f}")
    if randomness['runs_test']['is_random']:
        print("- 数据具有随机性，符合预期")
    else:
        print("- 数据可能存在系统性模式")

def example_two_sample():
    """双样本比较示例"""
    print("\n\n=== 双样本比较示例 ===")
    
    # 模拟两种不同处理方法的效果数据
    np.random.seed(456)
    treatment_a = np.random.normal(75, 8, 25).tolist()  # 处理方法A
    treatment_b = np.random.normal(82, 9, 28).tolist()  # 处理方法B
    
    print(f"处理方法A效果数据 (n={len(treatment_a)}): 均值≈{np.mean(treatment_a):.1f}")
    print(f"处理方法B效果数据 (n={len(treatment_b)}): 均值≈{np.mean(treatment_b):.1f}")
    
    analyzer = StatisticsAnalyzer()
    result = analyzer.two_sample_test(treatment_a, treatment_b)
    
    print(f"\n双样本检验结果: {json.dumps(result, indent=2, ensure_ascii=False)}")
    
    # 结果解释
    print("\n结果解释:")
    mw_significant = result['mann_whitney_u']['significant']
    ks_significant = result['kolmogorov_smirnov']['significant']
    
    if mw_significant:
        print("- Mann-Whitney U检验: 两种处理方法效果有显著差异")
    else:
        print("- Mann-Whitney U检验: 两种处理方法效果无显著差异")
        
    if ks_significant:
        print("- KS检验: 两组数据分布有显著差异")
    else:
        print("- KS检验: 两组数据分布无显著差异")

def example_multi_sample():
    """多样本比较示例"""
    print("\n\n=== 多样本比较示例 ===")
    
    # 模拟三个不同地区的销售数据
    np.random.seed(789)
    region_north = np.random.normal(100, 15, 20).tolist()  # 北部地区
    region_south = np.random.normal(110, 12, 22).tolist()  # 南部地区
    region_west = np.random.normal(95, 18, 18).tolist()    # 西部地区
    
    print(f"北部地区销售数据 (n={len(region_north)}): 均值≈{np.mean(region_north):.1f}")
    print(f"南部地区销售数据 (n={len(region_south)}): 均值≈{np.mean(region_south):.1f}")
    print(f"西部地区销售数据 (n={len(region_west)}): 均值≈{np.mean(region_west):.1f}")
    
    analyzer = StatisticsAnalyzer()
    result = analyzer.multi_sample_test([region_north, region_south, region_west])
    
    print(f"\n多样本检验结果: {json.dumps(result, indent=2, ensure_ascii=False)}")
    
    # 结果解释
    print("\n结果解释:")
    kw_significant = result['kruskal_wallis']['significant']
    
    if kw_significant:
        print("- Kruskal-Wallis检验: 至少有一个地区的销售表现与其他地区有显著差异")
        print("- 建议进行事后比较分析，确定具体哪些地区之间存在差异")
    else:
        print("- Kruskal-Wallis检验: 三个地区的销售表现无显著差异")

def example_time_series_randomness():
    """时间序列随机性检验示例"""
    print("\n\n=== 时间序列随机性检验示例 ===")
    
    # 生成两种不同的时间序列
    np.random.seed(101)
    
    # 随机序列
    random_series = np.random.normal(0, 1, 50).tolist()
    
    # 带趋势的序列
    trend_series = [0.1 * i + np.random.normal(0, 0.5) for i in range(50)]
    
    analyzer = StatisticsAnalyzer()
    
    print("1. 随机时间序列检验:")
    random_result = analyzer.white_noise_test(random_series)
    print(f"结果: {json.dumps(random_result, indent=2, ensure_ascii=False)}")
    
    print("\n2. 带趋势时间序列检验:")
    trend_result = analyzer.white_noise_test(trend_series)
    print(f"结果: {json.dumps(trend_result, indent=2, ensure_ascii=False)}")
    
    # 结果解释
    print("\n结果解释:")
    if random_result['runs_test']['is_random']:
        print("- 随机序列: 通过随机性检验，符合白噪声特征")
    else:
        print("- 随机序列: 未通过随机性检验")
        
    if trend_result['runs_test']['is_random']:
        print("- 趋势序列: 通过随机性检验")
    else:
        print("- 趋势序列: 未通过随机性检验，可能存在系统性模式")

def example_quality_control():
    """质量控制应用示例"""
    print("\n\n=== 质量控制应用示例 ===")
    
    # 模拟生产线质量数据
    np.random.seed(202)
    
    # 正常生产期间的数据
    normal_period = np.random.normal(50, 2, 30).tolist()
    
    # 调整后的生产数据
    adjusted_period = np.random.normal(52, 1.5, 25).tolist()
    
    analyzer = StatisticsAnalyzer()
    
    print("生产质量控制分析:")
    print(f"正常期间数据 (n={len(normal_period)}): 目标值=50")
    print(f"调整后数据 (n={len(adjusted_period)}): 目标值=50")
    
    # 分析正常期间数据
    normal_stats = analyzer.basic_statistics(normal_period)
    print(f"\n正常期间统计: 均值={normal_stats['mean']:.2f}, 标准差={normal_stats['std_deviation']:.2f}")
    
    # 分析调整后数据
    adjusted_stats = analyzer.basic_statistics(adjusted_period)
    print(f"调整后统计: 均值={adjusted_stats['mean']:.2f}, 标准差={adjusted_stats['std_deviation']:.2f}")
    
    # 比较两个期间
    comparison = analyzer.two_sample_test(normal_period, adjusted_period)
    
    print(f"\n期间比较结果:")
    if comparison['mann_whitney_u']['significant']:
        print("- 调整后的生产过程与正常期间有显著差异")
        if adjusted_stats['mean'] > normal_stats['mean']:
            print("- 质量有所提升")
        else:
            print("- 质量有所下降")
    else:
        print("- 调整前后的生产过程无显著差异")
    
    # 过程稳定性分析
    print(f"\n过程稳定性分析:")
    print(f"- 正常期间变异系数: {normal_stats['coefficient_of_variation']:.3f}")
    print(f"- 调整后变异系数: {adjusted_stats['coefficient_of_variation']:.3f}")
    
    if adjusted_stats['coefficient_of_variation'] < normal_stats['coefficient_of_variation']:
        print("- 调整后过程更加稳定")
    else:
        print("- 调整后过程稳定性有所下降")

if __name__ == "__main__":
    print("非参数统计分析 MCP 服务器 - 应用示例")
    print("=" * 50)
    
    example_single_sample()
    example_two_sample()
    example_multi_sample()
    example_time_series_randomness()
    example_quality_control()
    
    print("\n\n=== 示例运行完成 ===")
    print("\n提示:")
    print("- 这些示例展示了MCP服务器的各种统计分析功能")
    print("- 在实际应用中，请根据具体需求选择合适的分析方法")
    print("- 建议结合领域知识解释统计结果")